<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            Reflect.defineProperty()和Object.defineProperty()之间有一个区别就是
            Reflect.defineProperty()会返回一个布尔值代表是否操作成功，而Object.defineProperty()如果操作失败通常会以报错的形式呈现在控制台。

            这个其实用处不是很大，但是面试的时候人家问你Reflect和Object的区别，你务必要回答上来哦
        */
        // 举个例子
        let obj1 = {};
        let bool1 = Reflect.defineProperty(obj1, 'name', {
            value: 'mikaisa',
            writable: false
        });
        let bool2 = Reflect.defineProperty(obj1, 'name', {
            value: 'mikaisa33',
        }); //因为上面已经把writable设置为false了，所以这一步的赋值不会生效，那么操作就失败了
        console.log(bool1, bool2); //true false

        console.log('----------------------------------------');

        let obj2 = {};
        Object.defineProperty(obj2, 'name', {
            value: 'mikaisa',
            writable: false
        });
        // 想要知道是否失败只能通过try catch的形式
        try {
            Object.defineProperty(obj2, 'name', {
                value: 'mikaisa33',
            }); 
        }catch(e){
            console.log(e);//Uncaught TypeError: Cannot redefine property: name at Function.defineProperty
        }
    </script>
</body>

</html>